package com.yehebl.orm.data.common;

import com.yehebl.orm.config.IConfig;
import com.yehebl.orm.data.common.dao.IEntityDao;
import com.yehebl.orm.data.common.dao.IListDao;
import com.yehebl.orm.data.common.dao.IMapDao;
import com.yehebl.orm.data.common.dao.IObjectDao;
import com.yehebl.orm.data.common.dao.IPageDao;
import com.yehebl.orm.data.common.dao.ISimplePageDao;
import com.yehebl.orm.data.common.dao.IUpdateDao;
import com.yehebl.orm.data.common.xml.QueryXmlSql;
import com.yehebl.orm.data.map.ExpressionMap;

import java.util.Map;
import java.util.Set;

/**
 * 数据操作
 * 
 * @author tzd
 *
 */
public interface IDao extends IEntityDao,IListDao,IMapDao,IObjectDao,IPageDao,IUpdateDao,ISimplePageDao {

	
	/**
	 * 检查某列数据是否存在表中,
	 * 
	 * @param id 排除id和当前列在同一条数据
	 * @param value 值
	 * @param clazz 操作的实体类
	 * @return true 存在,false 不存在
	 */
	<T> boolean isExists(Object id, String field, Object value, Class<T> clazz);



    /**
	 * 检查某列数据是否存在表中,
	 * 
	 * @param value 值
	 * @param clazz 操作的实体类
	 * @return true 存在,false 不存在
	 */
	<T> boolean isExists(String field, Object value, Class<T> clazz);

	/**
	 * 执行数据库语句
	 * 
	 * @param sql sql语句
	 */
	void execute(String sql);



	/**
	 * 创建Map条件对象
	 */
	ExpressionMap createExpressionMap();
	
	/**
	 * 创建sql构建器
	 */
	ISqlBuild createSqlBuild();

	/**
	 * 创建QueryXmlSql查询对象
	 */
	QueryXmlSql createQueryXmlSql(String sqlName);



	/**
	 * 创建QueryXmlSql查询对象
	 */
	QueryXmlSql  createQuerySql(String sql);


	/**
	 * 获取dao config
	 */
	IConfig getConfig();
	

}
